import { app, shell, BrowserWindow, screen as _screen } from 'electron'
import { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import { log } from '@/utils'
import icon from '@resources/icon.png?asset'
import { initMenu } from '@/menu'
import { createDefaultTray } from '@/tray'
import initIpcMain from '@/ipc'
import '@/common/auto-launch'
import checkForUpdates from '@/updater'
// import cron from 'node-cron'

let mainWindow: Electron.BrowserWindow | null = null

// 创建主窗口
function createWindow() {
  if (mainWindow !== null) return

  // 获取主显示器的可用高度并减去标题栏高度
  // const primaryDisplay = screen.getPrimaryDisplay()
  // let { height: sysHeight } = primaryDisplay.workArea
  // sysHeight -= +import.meta.env.VITE_TITLE_HEIGHT
  // const height = Math.min(sysHeight, 780) // 窗口最大高度 780

  global.mainWindow = mainWindow = new BrowserWindow({
    width: 620,
    height: 500,
    resizable: false, // 禁止调整窗口大小
    maximizable: false, // 禁止最大化
    show: false, // 初始隐藏窗口
    alwaysOnTop: is.dev, // 开发模式下窗口置顶
    transparent: false, // 窗口不透明
    autoHideMenuBar: true, // 隐藏菜单栏
    titleBarStyle: 'hidden', // 隐藏标题栏
    titleBarOverlay: {
      color: '#1b1b1f00', // 标题栏背景色
      symbolColor: '#000', // 标题栏图标颜色
      height: +import.meta.env.VITE_TITLE_HEIGHT // 标题栏高度
    },
    ...(process.platform === 'linux' ? { icon } : {}),
    webPreferences: {
      preload: join(__dirname, '../preload/index.js'),
      sandbox: false, // 禁用沙箱
      nodeIntegration: false, // 禁用 Node.js API
      contextIsolation: true, // 启用上下文隔离
      webSecurity: false // 禁用同源策略
    }
  })

  // 设置窗口标题
  mainWindow.setTitle(app.getName())

  // 检查更新
  try {
    checkForUpdates(mainWindow)
  } catch (error) {
    log.error('❌❌❌ checkForUpdates error', error)
  }

  // 当窗口准备好显示时，显示窗口
  mainWindow.on('ready-to-show', () => {
    mainWindow?.show()
  })

  // 防止窗口关闭时退出应用，改为隐藏窗口
  mainWindow.on('close', (event) => {
    event.preventDefault()
    mainWindow?.hide()
  })

  // 清理资源
  mainWindow.on('closed', () => {
    mainWindow = null
    log.debug('Main window closed')
  })

  // 处理外部链接的打开
  mainWindow.webContents.setWindowOpenHandler((details) => {
    shell.openExternal(details.url)
    return { action: 'deny' }
  })

  // 加载开发或生产模式的页面
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
  } else {
    mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
  }
}

// 初始化应用
app.whenReady().then(() => {
  console.log('🚀🚀🚀 app ready', app.getName())
  // 确保应用是单实例
  if (!app.requestSingleInstanceLock()) {
    app.quit()
    return
  }

  // 第二个实例启动时聚焦到主窗口
  app.on('second-instance', () => {
    if (mainWindow) {
      if (mainWindow.isMinimized()) mainWindow.restore()
      if (!mainWindow.isVisible()) mainWindow.show()
      mainWindow.focus()
    }
  })

  // 设置应用的 User Model Id（Windows 专用）
  electronApp.setAppUserModelId('cn.lincq.electron-express-sharp')

  // 监听窗口创建并优化快捷键
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window)
  })

  // 激活时创建窗口
  app.on('activate', () => {
    console.log('🚀🚀🚀 app activate')
    if (!mainWindow) {
      createWindow()
    } else {
      if (!mainWindow.isVisible()) mainWindow.show()
    }
    // if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })

  // 创建主窗口
  createWindow()

  // 初始化 ipcMain
  initIpcMain()

  // 初始化菜单
  initMenu()

  // 创建系统托盘
  createDefaultTray()

  // 设置cron定时任务，每分钟执行一次
  // cron.schedule('*/5 * * * * *', () => {
  //   console.log('执行定时任务:', new Date().toLocaleString())
  //   // 在这里执行你的任务
  // })
})

// 关闭所有窗口时退出应用（非 macOS 平台）
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    if (BrowserWindow.getAllWindows().length === 0) app.quit()
  }
})

// 退出前销毁主窗口
app.on('before-quit', () => {
  mainWindow?.destroy()
  mainWindow = null
})
